package analyse

import (
	"github.com/gofiber/fiber/v2"
	"sg-backend/global"
	"sg-backend/model/paylog"
	"sg-backend/utils"
	"sort"
	"time"
)

func GetMonthPayPieData(ctx *fiber.Ctx) error {
	/**
	 * 获取选定月份份的支出分类汇总
	 */
	// 1,获取月份
	month := ctx.Query("month")
	if month == "" {
		month = time.Now().Format("2006-01")
	}

	// 字符串转时间
	cstZone := time.FixedZone("CST", 8*3600)
	selectMonth, _ := time.ParseInLocation("2006-01", month, cstZone)
	nextMonth := selectMonth.AddDate(0, 1, 0)

	// 2，获取用户的支出分类
	var payTypeList []paylog.PayType
	if err := global.DB.Where("user_id = ?", global.AuthUser.UserId).Find(&payTypeList); err.Error != nil {
		return ctx.JSON(fiber.Map{
			"status":  "error",
			"message": "解构支出类型List失败！！",
		})
	}

	// 数据容器
	var data []_PieJson

	// 开始获取统计
	for _, v := range payTypeList {
		var payLog []paylog.PayLog
		if err := global.DB.Where("user_id = ? AND pay_type_id = ?", global.AuthUser.UserId, v.Id).
			Where("time >= ? AND time < ?", selectMonth, nextMonth).
			Find(&payLog); err.Error != nil {
			return ctx.JSON(fiber.Map{
				"status":  "error",
				"message": "根据分类获取支出数据出错！" + err.Error.Error(),
			})
		}

		// 汇总数据
		total := float64(0)
		for _, x := range payLog {
			total = total + x.Money - x.Refund // 减去退款才是真的支出
		}
		total = utils.NumberToStr(total)
		data = append(data, _PieJson{
			Name:  v.Name,
			Value: total,
		})
	}

	// list排序
	sort.Slice(data, func(i, j int) bool {
		return data[i].Value < data[j].Value // 可以将<号修改为>更换为倒序排序
	})

	// 返回
	return ctx.JSON(fiber.Map{
		"status": "done",
		"data":   data,
	})
}
